package br.com.toscano.contpedido.view.servlet.relatorio;

//import java.io.ByteArrayOutputStream
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Map;
//import java.util.zip.ZipEntry;
//import java.util.zip.ZipOutputStream;
//
//import net.sf.jasperreports.engine.JRException;
//import net.sf.jasperreports.engine.JRExporterParameter;
//import net.sf.jasperreports.engine.JasperFillManager;
//import net.sf.jasperreports.engine.JasperPrint;
//import net.sf.jasperreports.engine.JasperReport;
//import net.sf.jasperreports.engine.export.JRHtmlExporter;
//import net.sf.jasperreports.engine.export.JRPdfExporter;
//import net.sf.jasperreports.engine.export.JRPdfExporterParameter;
//import net.sf.jasperreports.engine.export.JRRtfExporter;
//import net.sf.jasperreports.engine.export.JRTextExporter;
//import net.sf.jasperreports.engine.export.JRTextExporterParameter;
//import net.sf.jasperreports.engine.export.JRXlsExporter;
//import net.sf.jasperreports.engine.export.JRXlsExporterParameter;
//import net.sf.jasperreports.engine.util.JRLoader;

public class GeraDadosRelatorio {
//
//	public static byte[] gerarRelatorio(String nomeRelatorio, Map parametrosRelatorio,
//			RelatorioDataSource relatorioDataSource, int tipoSaidaRelatorio)
//			throws JRException, IOException, Exception  {
//
//		String [] nomeRelatorios = {nomeRelatorio};
//		RelatorioDataSource [] relatorioDataSources = {relatorioDataSource};
//
//		return gerarListaRelatorio(nomeRelatorios, parametrosRelatorio,
//				relatorioDataSources, tipoSaidaRelatorio);
//	}
//
//	public static byte[] gerarListaRelatorio(String [] nomeRelatorio, Map parametrosRelatorio,
//			RelatorioDataSource []relatorioDataSource, int tipoSaidaRelatorio)
//	throws JRException, IOException, Exception  {
//
//		// valor de retorno
//		ByteArrayOutputStream retorno = new ByteArrayOutputStream();
//		byte[] retornoArray = null;
//
//		// cria uma instância da classe JasperReport que vai conter o relatório
//		// criado
//		JasperReport [] jasperReport = new JasperReport[nomeRelatorio.length];
//		InputStream [] stream = new InputStream[nomeRelatorio.length];
//		JasperPrint []jasperPrint = new JasperPrint[nomeRelatorio.length];
//		List jasperPrintList = new ArrayList();
//
//		for (int i = 0; i < nomeRelatorio.length; i++) {
//			// carrega o arquivo do relatório (jasper) já compilado
//			stream[i] = (ConstantesRelatorio.getURLRelatorio(nomeRelatorio[i])).openStream();
//			// carrega o relatório compilado
//			jasperReport[i] = (JasperReport) JRLoader.loadObject(stream[i]);
//			stream[i].close();
//			jasperPrint[i] = JasperFillManager.fillReport(jasperReport[i],parametrosRelatorio, relatorioDataSource[i]);
//			jasperPrintList.add(jasperPrint[i]);
//		}
//
//			// Verifica qual o tipo de relatório para definir a geração
//			switch (tipoSaidaRelatorio) {
//			case ConstantesRelatorio.TIPO_TXT:
//
////				JasperPrint jasperPrint = (JasperPrint) JRLoader.loadObject(file);
////				JRTextExporter textExporter = new JRTextExporter();
////				textExporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
////				textExporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, REPORT_DIRECTORY + "/" + reportName + ".txt");
////				textExporter.setParameter(JRTextExporterParameter.CHARACTER_WIDTH,new Integer(10));
////				textExporter.setParameter(JRTextExporterParameter.CHARACTER_HEIGHT, new Integer(10));
////				System.out.println("Exporting report...");
////				textExporter.exportReport();
////				System.out.println("Done!");
//
//				JRTextExporter exporterTxt = new JRTextExporter();
//		    	exporterTxt.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);
//				exporterTxt.setParameter(JRExporterParameter.OUTPUT_STREAM,retorno);
//
//				exporterTxt.setParameter(JRTextExporterParameter.CHARACTER_WIDTH,new Integer(9));
//				exporterTxt.setParameter(JRTextExporterParameter.CHARACTER_HEIGHT, new Integer(9));
//
//				exporterTxt.exportReport();
//
//				break;
//			case ConstantesRelatorio.TIPO_PDF:
//
//				JRPdfExporter exporterPDF = new JRPdfExporter();
//				exporterPDF.setParameter(JRExporterParameter.JASPER_PRINT_LIST,jasperPrintList);
//				exporterPDF.setParameter(JRExporterParameter.OUTPUT_STREAM,retorno);
//				exporterPDF.setParameter(JRPdfExporterParameter.IS_CREATING_BATCH_MODE_BOOKMARKS, Boolean.TRUE);
//				exporterPDF.exportReport();
//
//				break;
//			case ConstantesRelatorio.TIPO_RTF:
//
//				JRRtfExporter exporterRTF = new JRRtfExporter();
//				exporterRTF.setParameter(JRExporterParameter.JASPER_PRINT_LIST,
//					jasperPrintList);
//				exporterRTF.setParameter(JRExporterParameter.OUTPUT_STREAM,
//						retorno);
//				exporterRTF.exportReport();
//
//				break;
//			case ConstantesRelatorio.TIPO_XLS:
//
//				JRXlsExporter exporterXLS = new JRXlsExporter();
//				exporterXLS.setParameter(JRExporterParameter.JASPER_PRINT_LIST,
//					jasperPrintList);
//				exporterXLS.setParameter(JRExporterParameter.OUTPUT_STREAM,
//						retorno);
//				exporterXLS.setParameter(
//						JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,
//						Boolean.TRUE);
//
//				exporterXLS.exportReport();
//
//				break;
//			case ConstantesRelatorio.TIPO_HTML:
//
//				// Para evitar problemas de concorrência, o nome do arquivo html
//				// gerado possui um número aleatório no nome
//			int numeroNomeRelatorio = new Double((Math.random() * 10000)).intValue();
//			JRHtmlExporter exporter = new JRHtmlExporter();
//			exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);
//			exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "relatorio " + numeroNomeRelatorio + ".html");
//			exporter.exportReport();
//
//
//				// pegar o arquivo, zipar pasta e arquivo e escrever no stream
//				try {
//					// criar o arquivo zip
//					File arquivoZip = File.createTempFile("zipHtml"
//							+ numeroNomeRelatorio, ".zip");
//
//					ZipOutputStream zos = new ZipOutputStream(
//							new FileOutputStream(arquivoZip));
//
//					// Pega o arquivo gerado do relatório
//					File pagina = new File("relatorio" + numeroNomeRelatorio
//							+ ".html");
//					// Pega a pasta que acompanha o arquivo do relatório gerado
//					File pastaDeImagens = new File("relatorio"
//							+ numeroNomeRelatorio + ".html_files");
//					GeraDadosRelatorio.adicionarArquivo(zos, pagina);
//					GeraDadosRelatorio.adicionarPasta(pastaDeImagens, zos);
////					// close the stream
//					zos.close();
//
//					FileInputStream inputStream = new FileInputStream(
//							arquivoZip);
//
//					int INPUT_BUFFER_SIZE = 1024;
//					byte[] temp = new byte[INPUT_BUFFER_SIZE];
//					int numBytesRead = 0;
//
//					while ((numBytesRead = inputStream.read(temp, 0,
//							INPUT_BUFFER_SIZE)) != -1) {
//						retorno.write(temp, 0, numBytesRead);
//					}
//
//					inputStream.close();
//					inputStream = null;
//
//					// Apaga todo o conteúdo gerado
//					pagina.delete();
//
////					if (pastaDeImagens.isDirectory()) {
////						String[] children = pastaDeImagens.list();
////						for (int i = 0; i < children.length; i++) {
////							boolean success = deleteDir(new File(pastaDeImagens, children[i]));
////							if (!success) {
////								return false;
////							}
////						}
////					}
////					IoUtil.deleteDir(pastaDeImagens);
//					arquivoZip.delete();
//
//				} catch (Exception e) {
//					// handle exception
//				}
//
//				break;
//			default:
//				throw new Exception("Escolha um tipo de relatório");
//			}
//
//			retornoArray = retorno.toByteArray();
//		// retorna o relatório gerado
//
//		return retornoArray;
//	}
//
//
//	/**
//	 * Adiciona o arquivo especificado ao zipOutputStream que representa o
//	 * arquivo zip
//	 *
//	 * @author Rodrigo Silveira
//	 * @date 19/05/2006
//	 *
//	 * @param zipFile
//	 *            Stream que representa o arquivo zip
//	 * @param file
//	 *            Arquivo a ser adicionado no arquivo zip
//	 * @throws IOException
//	 */
//	public static void adicionarArquivo(ZipOutputStream zipFile, File file)
//			throws IOException {
//
//		FileInputStream inputStream = new FileInputStream(file);
//		ByteArrayOutputStream baos = new ByteArrayOutputStream();
//		int INPUT_BUFFER_SIZE = 1024;
//		byte[] temp = new byte[INPUT_BUFFER_SIZE];
//		int numBytesRead = 0;
//
//		while ((numBytesRead = inputStream.read(temp, 0, INPUT_BUFFER_SIZE)) != -1) {
//			baos.write(temp, 0, numBytesRead);
//		}
//
//		inputStream.close();
//		inputStream = null;
//
//		byte[] data = baos.toByteArray();
//
//		ZipEntry zen = new ZipEntry(file.getName());
//		zipFile.putNextEntry(zen);
//		zipFile.write(data, 0, data.length);
//		zipFile.closeEntry();
//	}
//
//	/**
//	 * Adiciona um diretório a um arquivo zip especificado
//	 *
//	 * @author Rodrigo Silveira
//	 * @date 19/05/2006
//	 *
//	 * @param dir2zip
//	 *            Diretório que será adicionado ao arquivo zip
//	 * @param zos
//	 *            Stream que representa o arquivo zip
//	 * @throws IOException
//	 */
//	public static void adicionarPasta(File dir2zip, ZipOutputStream zos)
//			throws IOException {
//
//		String[] dirList = dir2zip.list();
//		byte[] readBuffer = new byte[2156];
//		int bytesIn = 0;
//
//		for (int i = 0; i < dirList.length; i++) {
//			File f = new File(dir2zip, dirList[i]);
//			if (f.isDirectory()) {
//				adicionarPasta(f, zos);
//
//				continue;
//			}
//			FileInputStream fis = new FileInputStream(f);
//			ZipEntry anEntry = new ZipEntry(f.getPath());
//
//			zos.putNextEntry(anEntry);
//
//			while ((bytesIn = fis.read(readBuffer)) != -1) {
//				zos.write(readBuffer, 0, bytesIn);
//			}
//
//			fis.close();
//		}
//
//	}
}
